
package com.bear.cmcc.NetTestHTTP.util;

import com.bear.cmcc.NetTestHTTP.R;
import com.bear.cmcc.NetTestHTTP.component.CityBean;
import com.bear.cmcc.NetTestHTTP.component.CountryBean;
import com.bear.cmcc.NetTestHTTP.component.CountrySortBean;
import com.bear.cmcc.NetTestHTTP.component.ProvinceBean;
import com.bear.cmcc.NetTestHTTP.component.VillageBean;
import com.bear.cmcc.NetTestHTTP.component.json.Areas;
import com.bear.cmcc.NetTestHTTP.component.json.CountryCityFtpInfoRank;
import com.bear.cmcc.NetTestHTTP.component.json.request.GridFtpInfoRequest;
import com.bear.cmcc.NetTestHTTP.component.json.respond.CityAreaFtpInfoRespond;
import com.bear.cmcc.NetTestHTTP.component.json.respond.CountryCityFtpInfoRankRespond;
import com.bear.cmcc.NetTestHTTP.component.json.respond.CountryInfoRespond;
import com.bear.cmcc.NetTestHTTP.component.json.respond.ProviceInfoRespond;
import com.bear.cmcc.NetTestHTTP.constant.FtpConstant;
import com.bear.cmcc.NetTestHTTP.constant.HttpConstant;
import com.bear.cmcc.NetTestHTTP.constant.MyCommonConstant;
import com.bear.cmcc.NetTestHTTP.httpUtil.HttpUtil;
import com.bear.cmcc.NetTestHTTP.service.NetSpeedInfoService;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import junit.framework.Assert;

/**
 * 全国情况工具类。
 * 
 * @author suchangjun
 */
public class CountryUtil {

    /**
     * 用来启动下载全国数据服务。 下载完成：会发一个广播
     * {@link MyCommonConstant.PrivateActionName.NET_WORK_TEST_DATA_DOWN}
     * {@link MyCommonConstant.PrivateActionName.ALL_DATA_SUCCESS} 全国数据成功与否。
     * {@link MyCommonConstant.PrivateActionName.FJ_DATA_SUCCESS} 福建数据下载成功与否。
     * 
     * @param context
     * @see #isNetTestDataExist(Context)
     */
    public static void startNetDataService(Context context) {

        if (context != null) {
            if (MyCommonUtil.isServiceRun(context, NetSpeedInfoService.class.getName())) {
                MyCommonUtil.showMessage(context, R.string.netSpeedInfoService_running);
            } else {
                if (!isNetTestAllDataExist(context)) {
                    Intent intent = new Intent(context, NetSpeedInfoService.class);
                    context.startService(intent);
                }
            }
        }
    }

    /**
     * 刷新数据，不管是否已经存在数据，用来启动下载全国数据服务。 下载完成：会发一个广播
     * {@link MyCommonConstant.PrivateActionName.NET_WORK_TEST_DATA_DOWN}
     * {@link MyCommonConstant.PrivateActionName.ALL_DATA_SUCCESS} 全国数据成功与否。
     * {@link MyCommonConstant.PrivateActionName.FJ_DATA_SUCCESS} 福建数据下载成功与否。
     * 
     * @param context
     * @see #isNetTestDataExist(Context)
     */
    public static void refreshNetDataService(Context context) {
        if (context != null) {
            if (MyCommonUtil.isServiceRun(context, NetSpeedInfoService.class.getName())) {
                MyCommonUtil.showMessage(context, R.string.netSpeedInfoService_running);
            } else {
                Intent intent = new Intent(context, NetSpeedInfoService.class);
                context.startService(intent);
            }
        }
    }

    /**
     * 判断全国网络排名数据以及福建小区排名数据是否存在。
     * 
     * @param context
     * @return
     */
    public static boolean isNetTestAllDataExist(Context context) {
        boolean isExist = false;

        File file = null;
        String[] remoteFiles = FtpConstant.ALL_PRI_Files;
        boolean allExist = true;
        for (String filePath : remoteFiles) {
            file = new File(context.getFilesDir() + "/" + filePath);
            if (!file.exists()) {
                allExist = false;
                break;
            }
        }
        boolean fjExist = isFileExistFJ(context);
        isExist = allExist && fjExist;

        return isExist;

    }

    /**
     * 判断全国网络排名数据是否存在。
     * 
     * @param context
     * @return
     */
    public static boolean isNetTestDataExist(Context context) {

        File file = null;
        String[] remoteFiles = FtpConstant.ALL_PRI_Files;
        boolean allExist = true;
        for (String filePath : remoteFiles) {
            file = new File(context.getFilesDir() + "/" + filePath);
            if (!file.exists()) {
                allExist = false;
                break;
            }
        }

        return allExist;

    }

    /**
     * 判断福建小区排名数据是否存在。
     * 
     * @param context
     * @return
     */
    public static boolean isNetTestFJDataExist(Context context) {
        return isFileExistFJ(context);
    }

    /**
     * 福建小区排名数据是否已经存在。
     * 
     * @param context
     * @return
     */
    public static boolean isFileExistFJ(Context context) {
        boolean exist = true;
        try {
            File file = null;
            String[] remoteFiles = {
                    FtpConstant.FtpFileNames.top2GFileNameFJ,
                    FtpConstant.FtpFileNames.topTDFileNameFJ
            };
            for (String filePath : remoteFiles) {
                file = new File(context.getFilesDir() + FtpConstant.FJ_FLOADER + filePath);
                if (!file.exists()) {
                    exist = false;
                    break;
                }
            }
        } catch (Exception e) {
            exist = false;
            if (e != null) {
                e.printStackTrace();
            }
        }
        return exist;
    }

    /**
     * 读取全国网络统计数据。
     * 
     * @param context
     * @return CountryBean 如果没有数据那么就是一个空的。
     */
    public static CountryBean getProvinceNetData(Context context) {
        CountryBean countryBeans = new CountryBean();
        if (context != null && isNetTestDataExist(context)) {
            try {
                String localPath = FtpConstant.FtpFileNames.score2GFileName;
                File file = new File(context.getFilesDir() + "/" + localPath);
                JsonUtil.parseScore_2GJson(context, file, countryBeans);

                String localPath1 = FtpConstant.FtpFileNames.scoreTDFileName;
                File file1 = new File(context.getFilesDir() + "/" + localPath1);
                JsonUtil.parseScore_TDJson(context, file1, countryBeans);
                String selfNetType = MyCommonUtil.getNetWorkName(context);
                countryBeans.setSelfNetType(selfNetType);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return countryBeans;
    }

    // /**
    // * 读取全国网络统计数据。
    // *
    // * @param context
    // * @return CountryBean 如果没有数据那么就是一个空的。
    // */
    // public static CountryBean getProvinceNetDataAdapter(Context context) {
    // CountryBean countryBeans = new CountryBean();
    // if (context != null && MyCommonUtil.isNetworkAviable(context)) {
    // try {
    //
    // CountryInfoRespond info = HttpUtil.getCountryFtpInfo(context);
    // if (info != null && info.getErrorCode() == HttpConstant.CODE_SUCCESS) {
    //
    // }
    //
    // String selfNetType = MyCommonUtil.getNetWorkName(context);
    // countryBeans.setSelfNetType(selfNetType);
    // } catch (Exception e) {
    // e.printStackTrace();
    // }
    // }
    //
    // return countryBeans;
    // }

    /**
     * 读取城市网络统计数据。
     * 
     * @param context
     * @param countryBean 全国的bean对象，不能为空。
     * @return ArrayList<CityBean> 如果没有数据那么就是一个空的。
     */
    public static ArrayList<CityBean> getCityNetData(Context context, ProvinceBean countryBean) {
        ArrayList<CityBean> cityBeans = new ArrayList<CityBean>();
        if (countryBean != null && context != null) {
            cityBeans.addAll(countryBean.getTDCitys());
            cityBeans.addAll(countryBean.get2GCitys());
        }
        return cityBeans;
    }

    /**
     * 读取小区2G网络统计数据(现在只有福建数据)。
     * 
     * @param context
     * @param isTop 是最好还是最差。
     * @return ArrayList<VillageBean> 一定不为null。
     */
    public static ArrayList<VillageBean> getVillage2GNetData(Context context, boolean isTop) {
        ArrayList<VillageBean> villageBeans = new ArrayList<VillageBean>();
        try {
            if (isFileExistFJ(context)) {
                String localPath = FtpConstant.FtpFileNames.top2GFileNameFJ;
                File file = new File(context.getFilesDir() + FtpConstant.FJ_FLOADER + localPath);
                return JsonUtil.parseFjTop10Data(context, file, isTop);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return villageBeans;
    }

    /**
     * 读取小区TD网络统计数据(现在只有福建数据)。
     * 
     * @param context
     * @param isTop 是最好还是最差。
     * @return ArrayList<VillageBean> 一定不为null。
     */
    public static ArrayList<VillageBean> getVillageTDNetData(Context context, boolean isTop) {
        ArrayList<VillageBean> villageBeans = new ArrayList<VillageBean>();
        try {
            if (isFileExistFJ(context)) {
                String localPath = FtpConstant.FtpFileNames.topTDFileNameFJ;
                File file = new File(context.getFilesDir() + FtpConstant.FJ_FLOADER + localPath);
                return JsonUtil.parseFjTop10Data(context, file, isTop);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return villageBeans;
    }

    /**
     * 读取小区2G网络统计数据(现在只有福建数据)。
     * 
     * @param context
     * @param isTop 是最好还是最差。
     * @param cityCode 福建的城市代码。
     * @return ArrayList<VillageBean> 一定不为null。
     */
    public static ArrayList<VillageBean> getVillage2GNetDataByCityCode(Context context,
            boolean isTop, String cityCode) {
        ArrayList<VillageBean> villageBeans = new ArrayList<VillageBean>();
        try {
            if (isFileExistFJ(context)) {
                String localPath = FtpConstant.FtpFileNames.top2GFileNameFJ;
                File file = new File(context.getFilesDir() + FtpConstant.FJ_FLOADER + localPath);
                return JsonUtil.parseFjTop10Data(context, file, isTop, cityCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return villageBeans;
    }

    /**
     * 读取小区2G网络统计数据(现在只有福建数据)。
     * 
     * @param context
     * @param isTop 是最好还是最差。
     * @param cityCode 福建的城市代码。
     * @return ArrayList<VillageBean> 一定不为null。
     */
    public static CityAreaFtpInfoRespond getVillageNetDataByCityCodeAdapter(Context context,
            boolean isTop, String cityCode, boolean idTD,int size) {
        CityAreaFtpInfoRespond city=null;
        try {
            if (MyCommonUtil.isNetworkAviable(context)) {
                VillageBean temp = null;
                int orderType = isTop ? HttpConstant.DES : HttpConstant.ASE;

                int netType = idTD ? HttpConstant.NET_TD : HttpConstant.NET_2G;

                city = HttpUtil.getCityAreaFtpInfo(context, cityCode,
                        netType, orderType, 0, size);
              

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return city;
    }

    /**
     * 读取某个网格下面小区网络统计数据(现在只有福建数据)。
     * 
     * @param context
     * @param isTop 是最好还是最差。
     * @param cityCode 福建的城市代码。
     * @return ArrayList<VillageBean> 一定不为null。
     */
    public static CityAreaFtpInfoRespond getGridFtpInfo(Context context, boolean isTop,
            String cityCode, boolean idTD, String gridCode,int size) {
        CityAreaFtpInfoRespond info = null;
        try {
            if (MyCommonUtil.isNetworkAviable(context)) {

                int orderType = isTop ? HttpConstant.DES : HttpConstant.ASE;

                int netType = idTD ? HttpConstant.NET_TD : HttpConstant.NET_2G;

                GridFtpInfoRequest request1 = new GridFtpInfoRequest(cityCode, gridCode, netType,
                        orderType, 0, size);
                info = HttpUtil.getGridFtpInfo(context, request1);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return info;
    }

    /**
     * 转换ArrayList<VillageBean> 数据对象。
     * 
     * @param info
     * @return 不会为null
     */
    public static ArrayList<VillageBean> changeToVillageBean(CityAreaFtpInfoRespond info) {
        ArrayList<VillageBean> villageBeans = new ArrayList<VillageBean>();
        try {
            VillageBean temp = null;
            if (info != null && info.getErrorCode() == HttpConstant.CODE_SUCCESS) {
                ArrayList<Areas> cells = info.getAreas();
                if (cells != null && cells.size() > 0) {
                    for (Areas cell : cells) {
                        temp = new VillageBean();
                        temp.setCi(cell.getCi());
                        temp.setLac(cell.getLac());
                        temp.setAverageSpeed(Double.valueOf(cell.getAverageSpeed()));
                        temp.setVillage_code(cell.getCellCode());
                        temp.setVillage_name(cell.getCellName());
                        temp.setDroppingRate(cell.getFailRate());
                        temp.setSignalStrength(Integer.valueOf(cell.getSignalStrength()));
                        temp.setJietong(cell.getConnectionRate());
                        villageBeans.add(temp);
                    }
                }
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }

        return villageBeans;
    }

    /**
     * 读取小区TD网络统计数据(现在只有福建数据)。
     * 
     * @param context
     * @param isTop 是最好还是最差。
     * @param cityCode 福建的城市代码。
     * @return ArrayList<VillageBean> 一定不为null。 {@link
     *         MyCommonUtil.getFjCityCodeByCityName(String cityName)}
     */
    public static ArrayList<VillageBean> getVillageTDNetDataByCityCode(Context context,
            boolean isTop, String cityCode) {
        ArrayList<VillageBean> villageBeans = new ArrayList<VillageBean>();
        try {
            if (isFileExistFJ(context)) {
                String localPath = FtpConstant.FtpFileNames.topTDFileNameFJ;
                File file = new File(context.getFilesDir() + FtpConstant.FJ_FLOADER + localPath);
                return JsonUtil.parseFjTop10Data(context, file, isTop, cityCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return villageBeans;
    }

    /**
     * 获取Top10 TD网络城市。
     * 
     * @param context
     * @param isTop表示 是最好，还是最差。
     * @return ArrayList<CityBean> 对象不会为null。
     */
    public static ArrayList<CityBean> getTop10_TD_city(Context context, boolean isTop) {
        ArrayList<CityBean> top10 = new ArrayList<CityBean>();
        try {
            String localPath = FtpConstant.FtpFileNames.topCityTDFileName;
            File file = new File(context.getFilesDir() + "/" + localPath);
            ArrayList<String[]> topData = JsonUtil.parseTop10Data(context, file, isTop);
            if (topData != null) {
                CityBean element = null;
                for (String[] elements : topData) {
                    try {
                        element = new CityBean();
                        element.setCity_name(elements[0]);
                        element.setDownSpeed(Double.valueOf(elements[1]).intValue());
                        // element.setTd_Rand(Integer.valueOf(elements[2]));
                        top10.add(element);
                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return top10;
    }

    /**
     * 获取Top10 TD网络城市。
     * 
     * @param context
     * @param isTop表示 是最好，还是最差。
     * @return ArrayList<CityBean> 对象不会为null。
     */
    public static CountryCityFtpInfoRankRespond getTop10_TD_cityAdater(Context context,
            boolean isTop, int size) {
        CountryCityFtpInfoRankRespond respond = null;
        try {
            int type = isTop ? 2 : 1;
            respond = HttpUtil.getCountryCityFtpInfoRank(context, HttpConstant.NET_TD, type, 0,
                    size);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return respond;
    }

    /**
     * 获取Top10 2G网络城市。
     * 
     * @param context
     * @param isTop表示 是最好，还是最差。
     * @return ArrayList<CityBean> 对象不会为null。
     */
    public static CountryCityFtpInfoRankRespond getTop10_2G_cityAdater(Context context,
            boolean isTop, int total_size) {
        CountryCityFtpInfoRankRespond respond = null;
        try {
            int type = isTop ? 2 : 1;
            respond = HttpUtil.getCountryCityFtpInfoRank(context, HttpConstant.NET_2G, type, 0,
                    total_size);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return respond;
    }

    /**
     * 数据转化
     * 
     * @param respond
     * @return
     */
    public static ArrayList<CityBean> changeTopRank(CountryCityFtpInfoRankRespond respond) {
        ArrayList<CityBean> top10 = new ArrayList<CityBean>();

        try {
            if (respond != null && respond.getErrorCode() == HttpConstant.CODE_SUCCESS) {

                List<CountryCityFtpInfoRank> citys = respond.getCitys();
                if (citys != null && citys.size() > 0) {
                    CityBean cityBean = null;
                    for (CountryCityFtpInfoRank elements : citys) {
                        try {
                            cityBean = new CityBean();
                            cityBean.setCity_name(elements.getCityName());
                            cityBean.setDownSpeed(Double.valueOf(elements.getAverageSpeed())
                                    .intValue());
                            cityBean.setCity_code(elements.getCityCode());
                            cityBean.setComRate(elements.getConnectionRate());
                            cityBean.setDroppingRate(elements.getFailRate());
                            cityBean.setSignalStrength(Integer.valueOf(elements.getSignalStrength()));
                            top10.add(cityBean);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return top10;
    }

    /**
     * 获取Top10 2G网络城市。
     * 
     * @param context
     * @param isTop表示 是最好，还是最差。
     * @return ArrayList<CityBean> 对象不会为null。
     */
    public static ArrayList<CityBean> getTop10_2G_city(Context context, boolean isTop) {
        ArrayList<CityBean> top10 = new ArrayList<CityBean>();
        try {
            String localPath = FtpConstant.FtpFileNames.topCity2GFileName;
            File file = new File(context.getFilesDir() + "/" + localPath);
            ArrayList<String[]> topData = JsonUtil.parseTop10Data(context, file, isTop);
            if (topData != null) {
                CityBean element = null;
                for (String[] elements : topData) {
                    try {
                        element = new CityBean();
                        element.setCity_name(elements[0]);
                        element.setDownSpeed(Double.valueOf(elements[1]).intValue());
                        // element.setTwoG_Rand(Integer.valueOf(elements[2]));
                        top10.add(element);
                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return top10;
    }

    /**
     * 获取最好的Top10 WLAN网络城市。
     * 
     * @param context
     * @return ArrayList<CityBean> 对象不会为null。
     */
    public ArrayList<CityBean> getTop10_WLAN_city(Context context) {
        ArrayList<CityBean> top10 = new ArrayList<CityBean>();
        // TODO

        return top10;
    }

    /**
     * 分享全国网络数据。 注意：调用系统自带分享的功能。
     * 
     * @param context
     * @param countryBean 全国信息。
     */
    public static void shareCountryNetData(Activity context, CountryBean countryBean) {
        if (context != null && countryBean != null) {
            try {
                String title = context.getString(R.string.share);
                String netType = MyCommonUtil.getNetWorkType(context);
                int deviceTotal = 0;
                int deviceRank = countryBean.getSelfRand();
                String shareMessasge = "";
                if (MyCommonConstant.NET_TYPE.NET_TYPE_2G.equals(netType)) {
                    deviceTotal = countryBean.getSize_2G();
                } else if (MyCommonConstant.NET_TYPE.TD.equals(netType)) {
                    deviceTotal = countryBean.getSize_TD();
                }

                if (MyCommonConstant.NET_TYPE.WLAN.equals(netType)) {
                    shareMessasge = String.format(context.getString(R.string.shareMessage),
                            countryBean.getSelfAverageSpeed());
                } else {

                    int percent = 100 - 100 * (deviceRank - 1) / deviceTotal;
                    shareMessasge = String.format(context.getString(R.string.shareCountryMessage),
                            countryBean.getSelfAverageSpeed(), percent + "%");
                }

                MyCommonUtil.share(context, title, shareMessasge);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 分享全省网络数据。 注意：调用系统自带分享的功能。
     * 
     * @param context
     * @param countryBean 全国信息。
     */
    public static void shareProvinceNetData(Activity context, double selfSpeed, ProvinceBean bean) {
        if (context != null && bean != null && selfSpeed > 0) {
            try {
                String title = context.getString(R.string.share);
                String netType = MyCommonUtil.getNetWorkType(context);
                double deviceTotal = 0;
                String shareMessasge = "";
                if (MyCommonConstant.NET_TYPE.NET_TYPE_2G.equals(netType)) {
                    deviceTotal = Double.valueOf(bean.getGprs_downSpeed());
                } else if (MyCommonConstant.NET_TYPE.TD.equals(netType)) {
                    deviceTotal = Double.valueOf(bean.getTd_downSpeed());
                }

                if (MyCommonConstant.NET_TYPE.WLAN.equals(netType)) {
                    shareMessasge = String.format(context.getString(R.string.shareMessage),
                            selfSpeed);
                } else {

                    shareMessasge = String.format(context.getString(R.string.shareProvinceMessage),
                            selfSpeed, deviceTotal);
                }

                MyCommonUtil.share(context, title, shareMessasge);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 分享全市区网络数据。 注意：调用系统自带分享的功能。
     * 
     * @param context
     * @param countryBean 全国信息。
     */
    public static void shareCityNetData(Activity context, double selfSpeed, CityBean bean) {
        if (context != null && bean != null && selfSpeed > 0) {
            try {
                String title = context.getString(R.string.share);
                String netType = MyCommonUtil.getNetWorkType(context);
                double deviceTotal = 0;
                String shareMessasge = "";
                if (MyCommonConstant.NET_TYPE.NET_TYPE_2G.equals(netType)) {
                    deviceTotal = Double.valueOf(bean.getDownSpeed());
                } else if (MyCommonConstant.NET_TYPE.TD.equals(netType)) {
                    deviceTotal = Double.valueOf(bean.getDownSpeed());
                }

                if (MyCommonConstant.NET_TYPE.WLAN.equals(netType)) {
                    shareMessasge = String.format(context.getString(R.string.shareMessage),
                            selfSpeed);
                } else {

                    shareMessasge = String.format(context.getString(R.string.shareCityMessage),
                            selfSpeed, deviceTotal);
                }

                MyCommonUtil.share(context, title, shareMessasge);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 分享本小区网络数据。 注意：调用系统自带分享的功能。
     * 
     * @param context
     * @param countryBean 全国信息。
     */
    public static void shareVillageNetData(Activity context, double selfSpeed, VillageBean bean) {
        if (context != null && bean != null && selfSpeed > 0) {
            try {
                String title = context.getString(R.string.share);
                String netType = MyCommonUtil.getNetWorkType(context);
                double deviceTotal = 0;
                String shareMessasge = "";

                deviceTotal = Double.valueOf(bean.getAverageSpeed());

                if (MyCommonConstant.NET_TYPE.WLAN.equals(netType)) {
                    shareMessasge = String.format(context.getString(R.string.shareMessage),
                            selfSpeed);
                } else {

                    shareMessasge = String.format(context.getString(R.string.shareVillageMessage),
                            selfSpeed, deviceTotal);
                }

                MyCommonUtil.share(context, title, shareMessasge);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 从全国数据，获取展示界面的数据。
     * 
     * @param bean
     * @return ArrayList<CountrySortBean> 一定不会为null
     */
    public static ArrayList<CountrySortBean> getSortCountryData(CountryBean bean) {
        ArrayList<CountrySortBean> returnBean = new ArrayList<CountrySortBean>();
        try {
            if (bean != null) {
                CountrySortBean element = null;
                HashMap<String, CountrySortBean> temp = new HashMap<String, CountrySortBean>();
                ArrayList<ProvinceBean> bean2G = bean.getPri_2G();
                ArrayList<ProvinceBean> beanTD = bean.getPri_TD();
                if (bean2G != null) {
                    for (ProvinceBean beanElement : bean2G) {
                        element = new CountrySortBean();
                        element.setGprs_downSpeed(beanElement.getGprs_downSpeed());
                        element.setProvince_name(beanElement.getProvince_name());
                        element.setTwoG_Rand(beanElement.getTwoG_Rand());
                        temp.put(element.getProvince_name().trim(), element);
                    }
                }

                if (beanTD != null) {
                    for (ProvinceBean beanElement : beanTD) {
                        element = temp.get(beanElement.getProvince_name().trim());
                        if (element == null) {
                            element = new CountrySortBean();
                            element.setProvince_name(beanElement.getProvince_name());
                            element.setTd_downSpeed(beanElement.getTd_downSpeed());
                            element.setTd_Rand(beanElement.getTd_Rand());
                            temp.put(beanElement.getProvince_name().trim(), element);
                        } else {
                            element.setTd_downSpeed(beanElement.getTd_downSpeed());
                            element.setTd_Rand(beanElement.getTd_Rand());
                        }

                    }
                }

                if (temp != null) {
                    returnBean.addAll(temp.values());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return returnBean;

    }

    /**
     * 从全国数据，获取展示界面的数据。
     * 
     * @param bean
     * @return ArrayList<CountrySortBean> 一定不会为null
     */
    public static ArrayList<CountrySortBean> getSortCountryData(Context context) {
        ArrayList<CountrySortBean> returnBean = new ArrayList<CountrySortBean>();

        CountryInfoRespond info = HttpUtil.getCountryFtpInfo(context);

        try {
            if (info != null && info.getErrorCode() == HttpConstant.CODE_SUCCESS) {

                ArrayList<ProviceInfoRespond> allProvince = info.getProvinces();
                if (allProvince == null || allProvince.size() <= 0) {
                    return returnBean;
                }

                CountrySortBean element = null;
                for (ProviceInfoRespond beanElement : allProvince) {
                    element = new CountrySortBean();
                    element.setGprs_downSpeed("" + beanElement.getAverageSpeed2G());
                    element.setProvince_name(beanElement.getProvinceName());
                    element.setProvince_code(beanElement.getProvinceCode());
                    element.setTwoG_Rand(beanElement.getRank());
                    element.setTd_downSpeed(beanElement.getAverageSpeedTD() + "");
                    element.setTd_Rand(beanElement.getRank_td());
                    returnBean.add(element);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return returnBean;

    }

    /**
     * 根据省名取 省下的城市列表
     * 
     * @param provinceName
     * @param allBean
     * @param isTd true是td列表，false是2g列表
     * @return 有可能是null
     */
    public static ProvinceBean getProviceBeanList(String provinceName, CountryBean allBean,
            boolean isTd) {
        if (provinceName != null && allBean != null) {
            ArrayList<ProvinceBean> list = (isTd ? allBean.getPri_TD() : allBean.getPri_2G());
            if (list == null || list.size() <= 0) {
                return null;
            }
            for (ProvinceBean provinceBean : list) {
                if (provinceBean.getProvince_name().equals(provinceName)) {
                    return provinceBean;
                }
            }
        }
        return null;
    }

    public static String getSpecialGrayStr(Context context, String _str) {
        // return "<font color='"+context.getString(R.color.report_gray)+"'>" +
        // _str + "</font>";
        return "<font color='#969696'>" + _str + "</font>";
    }

    public static String getSpecialWhiteStr(Context context, String _str) {
        // return "<font color='"+context.getString(R.color.report_white)+"'>" +
        // _str + "</font>";
        return "<font color='#e2e2e2'>" + _str + "</font>";
    }

}
